package com.ruicar.afs.cloud.afscase.loanapprove.service;

import com.ruicar.afs.cloud.afscase.backtopartnersinfo.entity.CaseBackToPartnersInfo;
import com.ruicar.afs.cloud.afscase.channel.entity.ChannelAffiliatedUnits;
import com.ruicar.afs.cloud.afscase.channel.entity.ChannelBaseInfo;
import com.ruicar.afs.cloud.afscase.channel.entity.ChannelRiskInfo;
import com.ruicar.afs.cloud.afscase.channel.entity.ChannelWitnessInfo;
import com.ruicar.afs.cloud.afscase.infomanagement.entity.*;
import com.ruicar.afs.cloud.afscase.loanapprove.condition.InvoiceOcrCondition;
import com.ruicar.afs.cloud.afscase.loanapprove.condition.LoanApproveCondition;
import com.ruicar.afs.cloud.afscase.loanapprove.entity.CarInvoiceInfo;
import com.ruicar.afs.cloud.afscase.loanapprove.entity.LoanBankCardInfo;
import com.ruicar.afs.cloud.afscase.loanapprove.task.condition.CarInsuranceInfoCondition;
import com.ruicar.afs.cloud.afscase.loanapprove.vo.*;
import com.ruicar.afs.cloud.afscase.loansecondaryfraudinfo.entity.LoanSecondaryFraudInfo;
import com.ruicar.afs.cloud.afscase.loanspecialbusinessinfo.entity.LoanSpecialBusinessInfo;
import com.ruicar.afs.cloud.bizcommon.business.entity.FinCostDetails;

import java.util.List;

/**
 * @author yk.Li
 * @Date 2020/7/17
 * @description
 */
public interface LoanApproveService {
    List<LoanSecondaryFraudInfo> getSecondaryFraudInfoList(LoanApproveCondition condition);

    List<LoanSpecialBusinessInfo> getSpecialBusinessInfoList(LoanApproveCondition condition);

    List<CaseBackToPartnersInfo> getBackToPartnersInfoList(LoanApproveCondition condition);

    List<CaseCustHistory> getCaseCustHistory(LoanApproveCondition condition);

    CaseBaseInfo getCaseBaseInfoList(LoanApproveCondition condition);

    CaseContractInfo getCaseContractInfoList(LoanApproveCondition condition);

    ChannelBaseInfo getChannelBaseInfoList(LoanApproveCondition condition);

    ChannelWitnessInfo getChannelWitnessInfoList(LoanApproveCondition condition);

    ChannelRiskInfo getChannelRiskInfo(LoanApproveCondition condition);

    List<CaseCustInfo> getCaseCustInfoList(LoanApproveCondition condition);

    CaseCarInfo getCaseCarInfoList(LoanApproveCondition condition);

    ChannelAffiliatedUnits getChannelAffiliatedUnitsList(LoanApproveCondition condition);

    CarInsuranceInfoVO getCarInsuranceInfoList(LoanApproveCondition condition);
    List<CarInsuranceInfoVO> getElectronicsInsuranceInfo(LoanApproveCondition condition);

    List<FinCostDetails> getCaseCostInfoList(LoanApproveCondition condition);

    CaseCostInfoVO getCostTotalInfo(LoanApproveCondition condition);

    CarInvoiceInfo getCarInvoiceInfo(LoanApproveCondition condition);

    List<FinFinancingItemsVO> getCaseFinancingItemsList(LoanApproveCondition condition);
    List<FinFinancingItemsVO> getCaseAddFinancingItemsList(LoanApproveCondition condition);
    List<AddedFinancingItemsVO> getAddFinancingItemsList(LoanApproveCondition condition);

    LoanBankCardInfo getLoanBankCardInfoList(LoanApproveCondition condition);

    /**
     * @Description 初审提交逻辑处理
     * @Author yk.Li
     * @Date 2020/08/13
     */
    void auditSubmit(LoanApproveCondition condition);

    /**
     * @Description 保存首单抵押单号信息
     * @Author rongji.zhang
     * @Date 2020/09/28
     */
    void saveIsFirstMortgage(String contractNo);

    /**
     * @Description 退回合作商提交逻辑处理
     * @Author yk.Li
     * @Date 2020/08/13
     */
    void backToDealer(LoanApproveCondition condition);

    /**
     * 获取首单抵押详情
     * @Author rongji.zhang
     * @param
     * @return
     */
    Boolean getIsFirstMortgage(LoanApproveCondition condition);

    /**
     * 获取OCR验证结果
     * @Author rongji.zhang
     * @Date 2020/8/12
     * @param invoiceOcrCondition
     * @return
     */
    InvoiceCheckVo getInvoiceCheck(InvoiceOcrCondition invoiceOcrCondition) throws Exception;
    /**
     * @Description 复审提交逻辑处理
     * @Author yk.Li
     * @Date 2020/08/13
     */
    void reviewSubmit(LoanApproveCondition condition);

    /**
     * @Description 退回初审提交逻辑处理
     * @Author yk.Li
     * @Date 2020/08/13
     */
    void backToAudit(LoanApproveCondition condition);
    /**
     * @Description: 初审提交，执行复核规则
     * @Author: fangchenliang
     * @Date: 2020/8/15 19:13
     * @Param: [contractNo]
     * @Return: void
     */
    void setReviewFlag(String contractNo);

    /**
     * @param
     * @Description 保存纸质保单信息
     * @Author yk.Li
     * @Date 2020/08/20
     */
    void savePaperInfo(CarInsuranceInfoCondition info);

    /**
     * add by fangchenliang
     * 锁定单个案件
     */
    void lockCase(String applyNo);

    /**
     * add by fangchenliang
     *锁定渠道
     */
    void lockChannel(String channelCode);

    /**
     * add by fangchenliang
     * 锁定单个合同
     * @param contractNo
     */
    void lockContract(String contractNo,String remarks);

    /**
     * add by fangchenliang
     * 解锁合同
     */
    void unLockContract(String contractNo,String remarks);

    /**
     * add by rongji.zhang
     * 暂停拦截
     */
    Boolean setSuspend(CaseContractInfo contractInfo);
}
